<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 1. 创建一个根标签(将动态创建的元素,插入到这个标签中,从而使动态创建的元素可以在页面中渲染出来) -->
    <div id="root"></div>
    <!-- 2. 引入react和react-dom
    注意: 要先引入react,后引入react-dom.
    react.js提供了React对象.
    react-dom.js提供了ReactDOM
    -->
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>

    <!-- 3. 在script标签中,写js,动态创建元素 -->
    <!-- 注意: 需要babel编译我们代码中的jsx,就要在script上写type="text/babel". 这样babel才会工作 -->
    <script type="text/babel">
      // const obj = {
      //   name: '李晶',
      //   age: '40',
      //   desc: '红浪漫超级会员',
      // }
      // const div = (
      //   <div>
      //     {/* 在jsx中 花括号叫做插值表达式. 里面可以写任何的js表达式*/}
      //     <h1>{obj.name}</h1>
      //     <p>{obj.age}</p>
      //     <p>{obj.desc}</p>
      //   </div>
      // )

      // 关于插值表达式的两个问题:
      // 1. 插值表达式可以写在jsx中的什么位置
      // 1.1 标签的子节点. 意味着要渲染这个插值表达式中的js运行之后的结果
      // 1.2 标签的属性的位置 意味着要控制属性的值
      // 2. 插值表达式中可以写什么
      // 可以写任何的js表达式
      // js表达式: 运行之后又结果的
      // 字面量: 1 '123' false
      const test = 'yyy'
      function fn() {}
      const div = (
        <div>
          <button disabled={false} className={test}>
            按钮
          </button>
          <p>{1}</p>
          <p>{'123'}</p>
          {/*不要渲染布尔值,什么都不展示*/}
          <p>{false}</p>
          {/*不要渲染null,undefined,什么都不展示*/}
          <p>{undefined}</p>
          <p>{null}</p>
          {/*不要渲染NaN*/}
          {/*<p>{NaN}</p> */}
          <p>{Infinity}</p>
          {/*如果要渲染一个数组,则react会将数组中的每一个元素,当做p标签的一个子节点去渲染*/}
          <p>{[1, 2, 3]}</p>
          {/*普通对象一定是js表达式, 但是绝对不允许渲染否则会报错*/}
          {/*<p>{{ name: 'zs' }}</p>*/}
          {/*函数是表达式,但是不要直接渲染*/}
          {/*<p>{function fn() {}}</p>*/}
          {/*函数调用也是表达式,渲染的是函数执行的结果*/}
          <p>{fn()}</p>
          <p>{test}</p>
        </div>
      )

      ReactDOM.render(div, document.getElementById('root'))
    </script>
  </body>
</html>
